diff options
| author | Adam Soltys <[email protected]> | 2023-12-07 22:34:23 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2023-12-07 22:34:23 -0800 |
| commit | 8940118dd22c5f2ab680ef8036bcfafecc5696ab (patch) | |
| tree | a49db92b3ba5f8668cc79ab1dae46e7a09999ba0 /src/routes/(app)/reset/[code] | |
| parent | 00e88944abb529d07e189f1181de8a4804f8ae9c (diff) | |
| download | coinos-ui-8940118dd22c5f2ab680ef8036bcfafecc5696ab.tar.gz coinos-ui-8940118dd22c5f2ab680ef8036bcfafecc5696ab.zip | |
password reset
Diffstat (limited to 'src/routes/(app)/reset/[code]')
| -rw-r--r-- | src/routes/(app)/reset/[code]/+page.server.js | 30 | ||||
| -rw-r--r-- | src/routes/(app)/reset/[code]/+page.svelte | 80 |
2 files changed, 110 insertions, 0 deletions
diff --git a/src/routes/(app)/reset/[code]/+page.server.js b/src/routes/(app)/reset/[code]/+page.server.js new file mode 100644 index 00000000..92ad1d0f --- /dev/null +++ b/src/routes/(app)/reset/[code]/+page.server.js @@ -0,0 +1,30 @@ +import { fail, redirect } from "@sveltejs/kit"; +import { fd, post, login } from "$lib/utils"; + +export const actions = { + default: async ({ cookies, params, request }) => { + let ip = request.headers.get("cf-connecting-ip"); + let error; + + let { code } = params; + let { password } = await fd(request); + + try { + let user = await post("/reset", { code, password }); + user.password = password; + + try { + await login(user, cookies, ip); + error = null; + } catch (e) { + error ||= e.message; + } + + if (error) return fail(400, { error }); + throw redirect(307, `/${user.username}`); + } catch (e) { + console.log(e.message); + return fail(400, { error: e.message }); + } + }, +}; diff --git a/src/routes/(app)/reset/[code]/+page.svelte b/src/routes/(app)/reset/[code]/+page.svelte new file mode 100644 index 00000000..83e860ae --- /dev/null +++ b/src/routes/(app)/reset/[code]/+page.svelte @@ -0,0 +1,80 @@ +<script> + import { t } from "$lib/translations"; + import Icon from "$comp/Icon.svelte"; + import Spinner from "$comp/Spinner.svelte"; + import { fly } from "svelte/transition"; + import { password } from "$lib/store"; + + export let form; + let email; + let loading; + let revealPassword; +</script> + +<div class="pt-10"> + <div class="w-[243px] mx-auto mb-10"> + <a href="/"> + <Icon icon="logo" /> + </a> + </div> + + <div class="flex justify-center items-center"> + <div + class="shadow-xl rounded-3xl p-10 pb-12 space-y-5 w-full mx-5 md:mx-0 md:w-[400px]" + > + <h1 class="text-2xl font-bold text-center">{$t("login.reset")}</h1> + + {#if form?.error} + <div class="text-red-600 text-center" in:fly> + {form.error} + </div> + {/if} + + <form class="space-y-5" method="POST"> + <div class="relative"> + <label for="password" class="block font-semibold" + >{$t("login.newPassword")}</label + > + {#if revealPassword} + <input + name="password" + type="text" + required + class="bg-primary" + bind:value={$password} + autocapitalize="none" + /> + {:else} + <input + name="password" + type="password" + required + class="bg-primary" + bind:value={$password} + autocapitalize="none" + /> + {/if} + <button + type="button" + on:click={() => (revealPassword = !revealPassword)} + class="absolute right-5 top-10"> + <Icon icon={revealPassword ? "eye" : "eye-off"} /> + </button> + </div> + + <div class="text-secondary">A new seed phrase will be generated for your account. You'll need to import your old seed phrase if you want to use the same nostr profile and savings account as before.</div> + + <button + type="submit" + class="bg-black text-white w-full rounded-2xl p-4 font-semibold hover:opacity-80" + disabled={loading}> + {#if loading} + <Spinner /> + {:else} + {$t("login.submit")} + {/if} + </button> + </form> + </div> + </div> +</div> |
